package com.atguigu.auth.utils;

import com.atguigu.model.system.SysMenu;

import java.util.ArrayList;
import java.util.List;

/**
 * ClassName: MenuHelper
 * Package: com.atguigu.auth.utils
 * Description:
 *
 * @Author: lmf
 * @Create: 2024/1/19 16:29
 * @Version: 1.0
 */
public class MenuHelper {
    /**
     * 构建菜单树
     * @param menus SysMenu
     * @return 菜单树
     */
    public static List<SysMenu> buildTree(List<SysMenu> menus) {
        // 创建存放容器
        ArrayList<SysMenu> sysMenus = new ArrayList<>();
        // 找到树入口
        for (SysMenu menu : menus) {
            // 确定父层
            if(menu.getParentId() == 0){
                // 根据父级 递归
                sysMenus.add(getChildren(menu, menus));

            }
        }
        return sysMenus;
    }

    /**
     * 递归获取子菜单
     * @param menu  菜单
     * @param menus 菜单集合
     * @return SysMenu
     */
    private static SysMenu getChildren(SysMenu menu, List<SysMenu> menus) {
        // 创建 children 存放数组
        menu.setChildren(new ArrayList<SysMenu>());

        for (SysMenu son : menus) {
            // 第一次进入没有 children 创建children数据
            if(menu.getChildren() == null){
                menu.setChildren(new ArrayList<SysMenu>());
            }

            if (menu.getId().longValue() == son.getParentId().longValue()) {
                // 将对应子集数据放入进去
                menu.getChildren().add(getChildren(son, menus));
            }
        }
        return menu;
    }


}
